#include "citycodeutils.h"
#include <QFile>
#include <QJsonDocument>
#include <QJsonArray>
#include <QJsonObject>

CityCodeUtils::CityCodeUtils()
{

}


void CityCodeUtils::initCityMap()
{
    //打开资源文件,读取里面数据，查找城市名对应code
        QFile file(":/citycode.json");
        file.open(QIODevice::ReadOnly);
        QByteArray rawData = file.readAll();
        file.close();

        //解析改文件
        QJsonDocument jsonDoc = QJsonDocument::fromJson(rawData);
        if(!jsonDoc.isNull()&&jsonDoc.isArray())
        {
            //转换为数组
            QJsonArray jsonArray = jsonDoc.array();
            for(QJsonValue value : jsonArray)
            {
                if(value.isObject())
                {
                    QString objName = value["city_name"].toString();
                    QString objCode = value["city_code"].toString();
                    cityMap.insert(objName,objCode);    //将数组中的城市名和code依次加入到map中
                }
            }
        }
}

//根据城市名搜索code
QString CityCodeUtils::getCityCodeFromName(QString cityName)
{
    if(cityMap.isEmpty())
    {
        initCityMap();
    }
    //对用户输入的城市名进行优化，citycode.json中的城市都没有市，有时用户输入时会输入市，将市去掉
    //
    int len = cityName.size();
    if(cityName.right(1)=="市")
        cityName = cityName.left(len-1);

    //从map中查询城市对应code
    QMap<QString,QString>::const_iterator it = cityMap.find(cityName);  //it指向指定城市
    if(it==cityMap.end())   //it指向末尾，说明没找到
    {
        it= cityMap.find(cityName+"市");     //城市后面加上市
        if(it==cityMap.end())
            it=cityMap.find(cityName+"县");  //加上市后没找到，加上县
        if(it==cityMap.end())
            it=cityMap.find(cityName+"区");  //加上县后没找到，加上区
        if(it==cityMap.end())               //市区县都找过了没找到，说明真没有，返回空
            return "";
    }
    return it.value();  //it.value获取到值，返回code
}



